/**
 * 图片懒加载
 * @param {Object} DOMElement
 *
 * @author fanrong33
 * @version 1.0.0 build 20150701
 *
 * depend md5.min.js
 *
 * htpp://.....jpg -> _downloads/image/image_md5+'.jpg'
 * 存在直接显示
 * 不存在加载保存
 *
 * usage src为默认图片，data-src填写图片网络地址，并且必须包含onload事件来触发懒加载功能。
 * <img src="placehold.jpg" data-src="http://...jpg"  onload="lazyload(this)" />
 */

function randomColor() {
  //16进制方式表示颜色0-F
  var arrHex = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
  var strHex = "#";
  var index;
  for(var i = 0; i < 6; i++) {
    //取得0-15之间的随机整数
    index = Math.round(Math.random() * 15);
    strHex += arrHex[index];
  }
  return strHex;
}

function lazyload(obj) {
  mui.plusReady(function() {

    var debug = false; // 默认打印调试日志
    if (obj.getAttribute('data-loaded')) {
      return;
    }

    var image_url = obj.getAttribute('data-src');
    obj.style.backgroundColor = randomColor();
    debug && console.log(image_url);


    // 1. 转换网络图片地址为本地缓存图片路径，判断该图片是否存在本地缓存
    // http://...jpg -> md5
    // 缓存目录 _downloads/image/(md5).jpg
    var image_md5 = md5(image_url);
    var local_image_url = '_downloads/image/' + image_md5 + '.jpg'; // 缓存本地图片url
    var absolute_image_path = plus.io.convertLocalFileSystemURL(local_image_url); // 平台绝对路径


    // new temp_img 用于判断图片文件是否存在
    var temp_img = new Image();
    temp_img.src = absolute_image_path;
    temp_img.onload = function() {
      debug && console.log('存在本地缓存图片文件' + local_image_url + '，直接显示');

      // 1.1 存在，则直接显示（本地已缓存，不需要淡入动画）
      obj.setAttribute('src', absolute_image_path);
      obj.setAttribute('data-loaded', true);
      return;
    }
    temp_img.onerror = function() {
      debug && console.log('不存在本地缓存图片文件');

      // 1.2 不存在则进行加载图片
      var img = new Image();
      img.src = image_url; // 传过来的图片路径在这里用
      img.onload = function() {
        var that = this;

        obj.setAttribute('src', image_url);
        obj.setAttribute('data-loaded', true);
        // obj.classList.add('img-animation');

        // 1.3 下载图片缓存到本地
        debug && console.log('开始下载图片' + image_url + ' 缓存到本地: ' + local_image_url);

        var download_task = plus.downloader.createDownload(image_url, {
          filename: local_image_url // filename:下载任务在本地保存的文件路径
        }, function(download, status) {
          if (status != 200) {
            // 下载失败,删除本地临时文件
            debug && console.log('下载失败,status' + status);
            if (local_image_url != null) {
              plus.io.resolveLocalFileSystemURL(local_image_url, function(entry) {
                entry.remove(function(entry) {
                  debug && console.log("临时文件删除成功" + local_image_url);
                }, function(e) {
                  debug && console.log("临时文件删除失败" + local_image_url);
                });
              });
            }
          }
        });
        download_task.start();
      }
    }

  })
}